www.gusucode.com > VC++ 密码探测器 > VC++ 密码探测器/gusucode/PwdSpy/OSInfo.cpp

    #include "stdafx.h"
#include "OSInfo.h"

//***********************************************
COSInfo::COSInfo()
{
	ZeroMemory(&m_osvi, sizeof(OSVERSIONINFO));
	m_osvi.dwOSVersionInfoSize = sizeof(OSVERSIONINFO);

	if(!GetVersionEx(&m_osvi))
		ZeroMemory(&m_osvi, sizeof(OSVERSIONINFO));
}

//***********************************************
COSInfo::~COSInfo()
{
}

//***********************************************
EOSType COSInfo::GetOSType(void) const
{
	EOSType eOSType = eUnknown;

	if(IsNT())
	{
		if(IsWindowsNT())
			eOSType = eWinNT;
		else if(IsWindows2K())
			eOSType = eWin2K;
		else if(IsWindowsXP())
			eOSType = eWinXP;
	}
	else
	{
		if(IsWindows95())
			eOSType = eWin95;
		else if(IsWindows98())
			eOSType = eWin98;
		else if(IsWindowsME())
			eOSType = eWinME;
	}

	return eOSType;
}

//***********************************************
bool COSInfo::IsWindows95(void) const
{
	// Windows95 if:
	// Major == 4 and Minor == 0 and PlatformId != NT
	return (m_osvi.dwMajorVersion == 4 &&
		m_osvi.dwMinorVersion == 0 &&
		m_osvi.dwPlatformId != VER_PLATFORM_WIN32_NT) ? true : false;
}

//***********************************************
bool COSInfo::IsWindows98(void) const
{
	// Windows98 if:
	// Major >= 4 and Minor > 0 and PlatformId != NT
	// (except Major == 4 and Minor == 90 which is ME)
	// (note:  Major == 4 and Minor == 0 is 95)
	return (m_osvi.dwMajorVersion >= 4 &&
		m_osvi.dwMinorVersion > 0 &&
		m_osvi.dwPlatformId != VER_PLATFORM_WIN32_NT &&
		!(m_osvi.dwMajorVersion == 4 &&	m_osvi.dwMinorVersion == 90)) ? true : false;
}

//***********************************************
bool COSInfo::IsWindowsME(void) const
{
	// WindowsME if:
	// Major == 4 and Minor == 90 and PlatformId != NT
	return (m_osvi.dwMajorVersion == 4 &&
		m_osvi.dwMinorVersion == 90 &&
		m_osvi.dwPlatformId != VER_PLATFORM_WIN32_NT) ? true : false;
}

//***********************************************
bool COSInfo::IsWindowsNT(void) const
{
	// WindowsNT4 if:
	// Major == 4 and Minor == 0 and PlatformId == NT
	return (m_osvi.dwMajorVersion == 4 &&
		m_osvi.dwMinorVersion == 0 &&
		m_osvi.dwPlatformId == VER_PLATFORM_WIN32_NT) ? true : false;
}

//***********************************************
bool COSInfo::IsWindows2K(void) const
{
	// Windows2000 if:
	// Major == 5 and Minor == 0 and PlatformId == NT
	return (m_osvi.dwMajorVersion == 5 &&
		m_osvi.dwMinorVersion == 0 &&
		m_osvi.dwPlatformId == VER_PLATFORM_WIN32_NT) ? true : false;
}

//***********************************************
bool COSInfo::IsWindowsXP(void) const
{
	// WindowsXP if:
	// Major == 5 and Minor == 1 and PlatformId == NT
	// !!! These numbers from a Beta of XP, double-check on final release.
	return (m_osvi.dwMajorVersion == 5 &&
		m_osvi.dwMinorVersion == 1 &&
		m_osvi.dwPlatformId == VER_PLATFORM_WIN32_NT) ? true : false;
}

//***********************************************
bool COSInfo::IsNT(void) const
{
	return (m_osvi.dwPlatformId == VER_PLATFORM_WIN32_NT) ? true : false;
}

//***********************************************
DWORD COSInfo::GetMajor(void) const
{
	return m_osvi.dwMajorVersion;
}

//***********************************************
DWORD COSInfo::GetMinor(void) const
{
	return m_osvi.dwMinorVersion;
}

//***********************************************
DWORD COSInfo::GetBuild(void) const
{
	return m_osvi.dwBuildNumber;
}

//***********************************************
DWORD COSInfo::GetPlatformId(void) const
{
	return m_osvi.dwPlatformId;
}

//***********************************************
LPCTSTR COSInfo::GetCSDString(void) const
{
	return m_osvi.szCSDVersion;
}